package com.szh.library.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.szh.model.Book;
import com.szh.model.User;
import com.szh.vo.BookFindVo;
import com.szh.vo.UserInsertVo;
import com.szh.vo.UserModifyVo;
import com.szh.vo.UserSelectVo;

import java.util.List;

/**
 * @author: SongZiHao
 * @date: 2023/5/10
 */
public interface UserService extends IService<User> {
    /**
     * 根据id查询用户
     * @param id 用户id
     * @return User
     */
    User selectUserById(Long id);

    /**
     * 查询所有用户
     * @return List<User>
     */
    List<User> selectAllUsers();

    /**
     * 条件查询用户，带分页
     * @param page 页码
     * @param limit 每页记录数
     * @param userSelectVo 查询条件vo类
     * @return Page<User>
     */
    Page<User> selectUsersByConditionPage(Long page, Long limit, UserSelectVo userSelectVo);

    /**
     * 新增用户
     * @param userInsertVo 用户新增vo类
     * @return 是否新增成功
     */
    boolean insertUser(UserInsertVo userInsertVo);

    /**
     * 根据id修改用户
     * @param userModifyVo 用户修改vo类
     * @return 是否修改成功
     */
    boolean modifyUser(UserModifyVo userModifyVo);

    /**
     * 根据id删除用户
     * @param id 用户id
     * @return 是否删除成功
     */
    boolean removeUserById(Long id);

    /**
     * 批量删除用户
     * @param userIds 待删用户id集合
     * @return 是否批量删除成功
     */
    boolean removeBatchByIds(List<Long> userIds);

    /**
     * 远程接口调用：根据id查询图书
     * @param id 图书id
     * @return Book
     */
    Book openFeignFindBookById(Long id);

    /**
     * 远程接口调用：查询所有图书
     * @return List<Book> 图书列表
     */
    List<Book> openFeignFindAllBooks();

    /**
     * 远程接口调用：条件查询图书，带分页
     * @param page 页码
     * @param limit 每页记录数
     * @param bookFindVo 查询条件
     * @return Page<Book>
     */
    Page<Book> openFeignFindBooksByConditionPage(Long page, Long limit, BookFindVo bookFindVo);
}
